package com.yawn;

import org.activiti.engine.*;
import org.activiti.engine.identity.User;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Task;

import java.util.List;
import java.util.UUID;

/**
 * 任务的用户和用户组权限
 * @author Created by yawn on 2017-12-10 10:38
 */
public class TestTaskAuth {

    public static void main(String[] args) {

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 存储服务、身份服务、任务服务
        RepositoryService repositoryService = engine.getRepositoryService();
        IdentityService identityService = engine.getIdentityService();
        TaskService taskService = engine.getTaskService();

        // 创建一个用户
        User user = identityService.newUser(UUID.randomUUID().toString());
        user.setEmail("com.yawn@qq.com");
        user.setFirstName("王");
        user.setLastName("yawn");
        user.setPassword("123456");
        identityService.saveUser(user);

        /// 创建一个任务（任务本应该从流程实例中获得）
//        Task task = taskService.createTaskQuery().processInstanceId("").singleResult();
        Task task = taskService.newTask(UUID.randomUUID().toString());
        task.setName("测试任务");
        taskService.saveTask(task);

        // 给任务添加候选用户(@任务候选人)
        taskService.addCandidateUser(task.getId(), user.getId());
        /// 候选用户组
//        taskService.addCandidateGroup(task.getId(), "");

        /// 查询用户有权限的任务(@任务候选人)
//        List<Task> taskList = taskService.createTaskQuery().taskCandidateOrAssigned(user.getId()).list();
        List<Task> taskList = taskService.createTaskQuery().taskCandidateUser(user.getId()).list();
        taskList.forEach(System.out::println);

        // 任务的唯一持有人(@任务持有人)
        taskService.setOwner(task.getId(), user.getId());
        List<Task> taskList1 = taskService.createTaskQuery().taskOwner(user.getId()).list();
        taskList1.forEach(System.out::println);

        // 任务的唯一代理人(@任务代理人 代理持有人处理任务)
        taskService.setAssignee(task.getId(), user.getId());
        List<Task> taskList2 = taskService.createTaskQuery().taskAssignee(user.getId()).list();
        taskList2.forEach(System.out::println);

        engine.close();
    }
}
